import common.ListNode;

class partition {
    public ListNode partition(ListNode head, int x) {
        // 两条链，一条比x大的链，一条比x小的链
        ListNode dummyMin = new ListNode(), dummyMax = new ListNode();
        ListNode pre = dummyMax, q = dummyMin;
        pre.next = head;
        while (head != null) {
            // 删除比x小的结点，然后接到比x小的链表末尾
            if (head.val < x) {
                pre.next = head.next;
                q.next = head;
                q = head;
                head = pre.next;
            } else {
                head = head.next;
                pre = pre.next;
            }
        }
        // 将比x小的链表末尾结点指向比x大的链表的头结点
        q.next = dummyMax.next;
        return dummyMin.next;
    }
}
